14.2 线程同步机制包装类 calm2012 2019-04-09 星期二 linux / Linux高性能服务器编程 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107#ifndef LOCKER_H#define LOCKER_H#include <exception>#include <pthread.h>#include <semaphore.h>class sem{public: sem() { if (sem_init(&m_sem, 0, 0) != 0) { throw std::exception(); } } ~sem() { sem_destroy(&m_sem); } bool wait() { return sem_wait(&m_sem) == 0; } bool post() { return sem_post(&m_sem) == 0; }private: sem_t m_sem;};class locker{public: locker() { if (pthread_mutex_init(&m_mutex, NULL) != 0) { throw std::exception(); } } ~locker() { pthread_mutex_destroy(&m_mutex); } bool lock() { return pthread_mutex_lock(&m_mutex) == 0; } bool unlock() { return pthread_mutex_unlock(&m_mutex) == 0; }private: pthread_mutex_t m_mutex;};class cond{public: cond() { if (pthread_mutex_init(&m_mutex, NULL) != 0) { throw std::exception(); } if (pthread_cond_init(&m_cond, NULL) != 0) { pthread_mutex_destroy(&m_mutex); throw std::exception(); } } ~cond() { pthread_mutex_destroy(&m_mutex); pthread_cond_destroy(&m_cond); } bool wait() { int ret = 0; pthread_mutex_lock(&m_mutex); ret = pthread_cond_wait(&m_cond, &m_mutex); pthread_mutex_unlock(&m_mutex); return ret == 0; } bool signal() { return pthread_cond_signal(&m_cond) == 0; }private: pthread_mutex_t m_mutex; pthread_cond_t m_cond;};#endifint main(){ return 0;} 2019-04-09 星期二 linux Linux高性能服务器编程 上一页 14.3 在多线程程序中调用fork函数 linux Linux高性能服务器编程 下一页 14.1 按不同顺序访问互斥锁导致死锁 linux Linux高性能服务器编程